import traceback

import allure

from utils.handle_log import assret_log


class CsAssert:
    @classmethod#类方法--不需要创建实例
    def api_assert(cls,result,condition,exp_result,msg='操作日志',step='步骤'):
        """
        :param result: 实际接口返回响应数据
        :param condition: 断言的关系  in   ==  not in
        :param exp_result: 预期的数据
        :param msg: 描述
        :return: 暂定
        """
        try:
            assert_type = {
                '==': result == exp_result,
                # 'in': result in exp_result if not isinstance(result,int) else False,
                '!=': result != exp_result
                # 'not in': result not in exp_result  if not isinstance(result,int) else False
            }
            #如果用户输入的断言类型有的话
            if condition in assert_type:
                #执行断言
                t1 = assert_type[condition]
                if t1:
                    assret_log.set_log(msg).info(f'''用例执行结果如下：
    {step}预期值：{exp_result}，
    {step}实际值：{result}
            ''')
                    assert t1
                else:
                    assret_log.set_log(msg).error(f'''用例执行结果如下：
    {step}预期值：{exp_result}，
    {step}实际值：{result}
            ''')
                    assert t1
                # with open(f'../outFiles/logs/{msg}.log', 'rb') as f:
                #     file = f.read()
                # allure.attach(file, f'{step}_log', allure.attachment_type.TEXT)  # 图片对比不同，把图片放在allure报告中
            else:
                #人为抛出异常
                raise AssertionError(f'使用的{condition}断言类型不存在,请输入正确的断言方式！')
        except Exception as error_object:#断言错误！
            # log.error(traceback.format_exc())
            raise error_object